Amazon AthenaでいろいろなSELECTを実行してみる
はじめに
re:Invent 2016で発表されたAthenaについては弊社でも既に様々な記事が出ております。公式サイトによるといろいろなSQLを使う事ができるようなのですが、今回はデータのSELECTを実際に試してみました。
SELECTの実行
Athenaの実行方法については弊社の記事などを参考にしてください。今回はデフォルトで用意されているsampledb.elb_logsテーブルに対してSELECTを実行してみました。
以下、今回試したSELECTの種類です。
- with
- distinct
- join
- where
- group by
- having
- union
- order by
- limit
- tablesample
- unnest
with
以下のSQLを実行しました。
with elb_logs_with as ( select requestip, backendport from elb_logs where backendport >= 8000 ) select requestip, backendport from elb_logs_with where requestip like '244%' union select requestip, backendport from elb_logs_with where requestip like '254%'
実行結果は以下となりました。
distinct
以下のSQLを実行しました。
select distinct requestip from elb_logs
実行結果は以下となりました。
join
joinする対象のテーブルとして「porttype」テーブルを用意して以下のデータを登録しました。
以下のSQLを実行しました。
select log.elbname, log.backendport, porttype.type from elb_logs log inner join porttype porttype on log.backendport = porttype.port
実行結果は以下となりました。
where
以下のSQLを実行しました。
select requestip, backendport from elb_logs where requestip like '254%'
実行結果は以下となりました。
group by
以下のSQLを実行しました。
select requestip, count(*) from elb_logs group by requestip
実行結果は以下となりました。
having
以下のSQLを実行しました。
select requestip, count(*) from elb_logs group by requestip having count(*) > 10
実行結果は以下となりました。
union
以下のSQLを実行しました。
select requestip, backendport from elb_logs where backendport = 80 union select requestip, backendport from elb_logs where backendport = 8888
実行結果は以下となりました。
order by
以下のSQLを実行しました。
select distinct backendport from elb_logs order by backendport
実行結果は以下となりました。
limit
以下のSQLを実行しました。
select * from elb_logs limit 5
実行結果は以下となりました。
tablesample
以下のSQLを実行しました。
select * from elb_logs tablesample SYSTEM(10);
実行結果は以下となりました。
unnest
以下のSQLを実行しました。
select * from unnest(ARRAY['a', 'b' , 'c'])
実行結果は以下となりました。
まとめ
いろいろなSELECTを使いデータの抽出を行うことができました。例えばS3に配置されたログから必要な項目やレコードを抽出するとか、件数を取得するなど、様々な用途が想定できると思います。